/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlers;

import Atores.Aluno;
import Atores.Curso;
import Atores.Funcionario;
import Atores.Professor;
import Execcoes.CursoJaExisteException;
import Execcoes.NumeroMaximoEcedidoException;
import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author jorge
 */
public class Controler implements AcoesGerente {
    
    private static Controler controler;
    private List<Curso> cursos;
    private List<Funcionario> funcionarios;
    
    private Controler() {
        cursos = new ArrayList<Curso>();
        funcionarios = new ArrayList<Funcionario>();
    }
    
    public static synchronized Controler getInstance() {
        
        if (controler == null) {
            controler = new Controler();
        }
        
        return controler;
        
    }
    
    @Override
    public void cadastrarAluno(Aluno aluno, Curso curso) throws NumeroMaximoEcedidoException {
        
        int numAlunos = curso.getAlunosCadastrados();
        if (numAlunos < curso.getCapacidadeAlunos()) {
            curso.getAlunos()[numAlunos + 1] = aluno;
            curso.setAlunosCadastrados(numAlunos + 1);
        } else {
            throw new NumeroMaximoEcedidoException();
        }        
        
    }
    
    @Override
    public void removerAluno(Aluno a, Curso curso) {
        
        for (int i = 0; i < curso.getAlunosCadastrados(); i++) {
            
            if (a.getMatricula() == curso.getAlunos()[i].getMatricula()) {
                
                curso.getAlunos()[i] = null;
                
                for (int j = i + 1; j < curso.getAlunosCadastrados(); j++) {
                    
                    curso.getAlunos()[i] = curso.getAlunos()[j];
                }
                
                break;
            }
            
            
        }
    }
    
    @Override
    public void cadstrarCurso(Curso curso) throws CursoJaExisteException {
        if (cursos.contains(curso)) {
            throw new CursoJaExisteException();
        }
        
        cursos.add(curso);
    }
    
    @Override
    public void removerCurso(Curso curso) {
        cursos.remove(curso);
    }
    
    @Override
    public void cadastrarFuncionario(Funcionario funcionario) {
        
        funcionarios.add(funcionario);
        
    }
    
    @Override
    public void aumentarSalario(Funcionario funcionario, double aumento) {
        
        funcionario.aumentarrSalario(aumento);
    }
    
    @Override
    public void demitirFuncionario(Funcionario funcionario) {
        funcionarios.remove(funcionario);
    }
    
    @Override
    public void cadastrarHorasExtra(Funcionario funcionario, int horas) {
        
        funcionario.cadastrarHorasExtras(horas);
    }
    
    @Override
    public double calcularSalario(Funcionario funcionario) {
       return funcionario.calcularSalario();
    }
    
    @Override
    public void adicionarHorasAula(Professor professor, int horas) {
        professor.addHorasAula(horas);
    }
}
